package betandregret;

import java.util.Calendar;

import betandregret.exceptions.RegretException;
import betandregret.interfaces.IBetAndRegret.Systemereignis;

public class Wettverwaltung {

	private Spielverwaltung sv;
	
	private SpielCollection spiele;

	private WetteCollection wetten;

	private KundendatenCollection kundendaten;

	private TeamCollection teams;

	/**
	 * default constructor
	 * !Achtung! Wettverwaltung kennt noch nicht die Spielverwaltung, muss noch  ueber setter gesetzt werden
	 * @param datum
	 */
	public Wettverwaltung(){
			this.spiele = new SpielCollection();
			this.wetten = new WetteCollection();
			this.kundendaten = new KundendatenCollection();
			this.teams = new TeamCollection();
			
	}
	
	public void addSpiel(Spiel spiel) {
		this.spiele.add(spiel);
	}
	
	public Systemereignis wettePlatzieren(int kid, int einsatz, int sid, int tid) 
		throws RegretException {
		Calendar datum = BetAndRegret.getDatum();
		Kundendaten k = kundendaten.findeKunde(kid);
		Spiel s = spiele.findeSpiel(sid);
		Team t = s.findeTeam(tid);
		if (t == null){
			throw new RegretException(Systemereignis.TEAM_NICHT_BETEILIGT);
		}
		boolean bereitsG = k.bereitsGewettet(s);
		if (bereitsG == true){
			throw new RegretException(Systemereignis.BEREITS_AUF_SPIEL_GEWETTET);
		}
		Calendar startzeit = s.getStartzeit();
		if (startzeit.before(datum)){
			throw new RegretException(Systemereignis.SPIEL_BEREITS_BEGONNEN);
		}
		int mindesteinsatz = s.getMindesteinsatz();
		if (mindesteinsatz > einsatz){
			throw new RegretException(Systemereignis.WETTEINSATZ_ZU_GERING);
		}
		Wette neue_wette = new Wette(k, t, s, einsatz);
		wetten.add(neue_wette);
		k.addWette(neue_wette);
		s.addWette(neue_wette);
		return Systemereignis.WETTE_ERFOLGREICH_PLATZIERT;
	}

	public void setSpielverwaltung(Spielverwaltung sv) {
		this.sv = sv;
	}

	public void addTeam(Team team) {
		teams.add(team);
	}

	public void addKunde(Kundendaten neuer_kunde) {
		kundendaten.add(neuer_kunde);		
	}

	public Systemereignis wetteZurueckziehen(int kundenID, int spielID) 
		throws RegretException {
		Calendar datum = BetAndRegret.getDatum();
		Kundendaten k = kundendaten.findeKunde(kundenID);
		Spiel s = spiele.findeSpiel(spielID);
		
		boolean bereitsG = k.bereitsGewettet(s);
		if (bereitsG == false){
			throw new RegretException(Systemereignis.WETTE_EXISTIERT_NICHT);
		}
		
		Calendar startzeit = s.getStartzeit();
		if (startzeit.before(datum)){
			throw new RegretException(Systemereignis.SPIEL_BEREITS_BEGONNEN);
		}
		
		Wette wette = wetten.findeWette(kundenID, spielID);
		wetten.remove(wette);
		k.removeWette(wette);
		s.removeWette(wette);
		return Systemereignis.WETTE_ERFOLGREICH_ZURUECKGEZOGEN;		
	}



}
